<?php

/**
 * @name SBShop
 * @author Карпенко Алексей (tonatos@gmail.com)
 * @version 0.1
 *
 * @desription
 *
 * Электронный магазин для MODx
 *
 * Экшен модуля электронного магазина: Управление шаблонами параметров
 *
 */

class products_mode {

	protected $sModuleLink;
	protected $sMode;
	protected $sAct;
        protected $table;
	/**
	 * Конструктор
	 * @global <type> $modx
	 * @param <type> $sModuleLink
	 * @param <type> $sMode
	 * @param <type> $sAct
	 */
	public function __construct($sModuleLink, $sMode, $sAct = '') {
		global $modx;
		/**
		 * Устанавливаем режим менеджера
		 */
		$modx->sbshop->bManager = true;
		/**
		 * Записываем служебную информацию модуля, чтобы делать разные ссылки
		 */
		$this->sModuleLink = $sModuleLink;
		$this->sMode = $sMode;
		$this->sAct = $sAct;

                $this->table = $modx->getFullTableName("sbshop_orders");
                
		/**
		 * Обрабатываем заданное действие
		 */
		switch ($this->sAct) {
                        case "change_status":
                            $this->change_status();
                            break;
			default:
                            $this->show();
			break;
		}
		
	}


        public function show() {
            global $modx;


		/**
		 * Получаем набор шаблона
		 */
		$sTemplate = $modx->sbshop->getModuleTemplate('order');
		/**
		 * Разбиваем набор
		 */
		list($sInfo,$sOuter,$sOption,$sSelOption,$sProdOuter,$sProdRow,$sProdOptOuter,$sProdOptRow,$sCommOuter,$sCommRow) = explode('<!-- ### -->', $sTemplate);
		/**
		 * Массив шаблонов
		 */
		$aTemplates = array(
			'orderinfo' => $sInfo,
			'action_outer' => $sOuter,
			'action_option' => $sOption,
			'action_option_selected' => $sSelOption,
			'product_outer' => $sProdOuter,
			'product_row' => $sProdRow,
			'product_option_outer' => $sProdOptOuter,
			'product_option_row' => $sProdOptRow,
			'comment_outer' => $sCommOuter,
			'comment_row' => $sCommRow,
		);


            //Получаем дату фильта
            $date = isset($_POST['date'])?$_POST['date']: date("d.m.Y");
            $convert_date = date("Y-m-d",strtotime($date));
     
            $m_where = (isset($_POST['show_all']))?"":"and (order_date_add between '$convert_date 00:00' and '$convert_date 23:59')";

            $orders = $modx->db->select("*",$this->table,"order_status>=10 $m_where");

            $data = array();

            while($row=$modx->db->GetRow($orders)){
                $statuses = unserialize($row['order_product_status']);
                $order = new SBOrder();
                $order->loadById($row['order_id']);
                $products = $order->getProducts();

                foreach($products as $key=>$product){
                    $product  = (object)$product;
                    $product->id = $key;
                    $product->id_order = $order->getAttribute("id");
                    $product->date = $this->ConvertDate($order->getAttribute("date_add"));
                    $id_user = $order->getAttribute("user");
                    $user = new SBCustomer($id_user);
                    $user = (object)$user->getAttributes();
                    $pr = new SBProduct();
                    $pr->load($product->id);
                    $product->name = $pr->getAttribute("title");

                    $product->price = $order->getProductPriceBySetId($product->id);
                    
                    $product->client=$user->fullname." тел: ".$user->phone." email: <a href='$user->email'>$user->email</a>";
                    $product->client.="<br/>Адрес: $user->city, $user->address";
                    

                    $aOrderInfo = $order->getOrderSetInfo($product->id);

                    /**
                     * Если установлена комплектация
                     */
                    if(isset($aOrderInfo['bundling'])) {
                            /**
                             * Получаем комплектацию по идентификатору
                             */
                            $aBundling = $pr->getBundlingById($aOrderInfo['bundling']);
                            /**
                             * Записываем название комплектации в плейсхолдер
                             */
                            $product->komplect = $aBundling['title'];
                    }

                    $aOptions = array();
                    if(isset($aOrderInfo['sboptions']) and count($aOrderInfo['sboptions']) > 0) {
                        foreach ($aOrderInfo['sboptions'] as $sOptKeyId => $sOptValId) {
                                /**
                                 * Создаем плейсхолдеры
                                 */
                                $aOptRepl = $modx->sbshop->arrayToPlaceholders($pr->getNamesByNameIdAndValId($sOptKeyId,$sOptValId));
                                /**
                                 * Разделитель между опцией и значением
                                 */
                                $aOptRepl['[+sb.separator+]'] = $modx->sbshop->config['option_separator'];
                                /**
                                 * Если значение находится в списке скрываемых
                                 */
                                if(in_array($sOptValId, $modx->sbshop->config['hide_option_values'])) {
                                        /**
                                         * Очищаем разделитель и значение
                                         */
                                        $aOptRepl['[+sb.value+]'] = '';
                                        $aOptRepl['[+sb.separator+]'] = '';
                                }
                                $aOptions[] = str_replace(array_keys($aOptRepl), array_values($aOptRepl), $aTemplates['product_option_row']);
                        }
                        /**
                         * Объединяем ряды и вставляем в контейнер
                         */
                        $sOptions = str_replace('[+sb.wrapper+]', implode($aOptions), $aTemplates['product_option_outer']);
                        $product->options = $sOptions;
                    } else {
                        $product->options= '';
                    }

                    if (!empty($product->sbvariants)){
                        $var = new SBVariant($aOrderInfo['sbvariants']);
                        $product->options .= "<ul><li>[$var->article] $var->name</li></ul>";
                    }

                    //Статус

                    $product_status = json_decode($order->getAttribute("product_status"),true);

                    $ps = $modx->sbshop->lang['product_status'];

                    $s_status = "<select name='product_status'>";

                    foreach ($ps as $key=>$value){

                        $selected= $product_status[$product->id]==$key ? "selected='selected'":"";
                        if ($product_status[$product->id]==$key){
                            $product->status = $value;
                        }

                        $s_status.="<option value='$key' $selected>$value</option>";
                    }
                    $s_status.="</select>";

                    //print_r();
                    $product->select = $s_status;


                    $data[]=$product;
                }

            }



            include MODX_BASE_PATH."assets/extends/sbshop/modules/templates/products.tpl.php";

        }


       function ConvertDate($sql_date) {
            $date=strtotime($sql_date);
            $final_date=date("d.m.Y H:i", $date);
            return $final_date;
       }
        

       function change_status(){
            global $modx;
            $id_order = (int)$_GET['id_order'];
            if (empty($id_order)) return;

            $id_product = $_GET['id_product'];
            if (empty($id_product)) return;

            $status = (int)$_GET['status'];

            $oOrder = new SBOrder();
            $oOrder->loadById($id_order);
            $aIds = $oOrder->getProductSetIds();

            $statuses = (array)json_decode($oOrder->getAttribute("product_status"));
            if (empty($statuses)) $statuses = array();
            $statuses[$id_product] = $status;
            $result = $modx->db->escape(json_encode($statuses));
            $modx->db->query("update $this->table set order_product_status = '$result' where order_id = $id_order");

       }
}
?>
